// 常用算法
// find 
// adjacent_find 查找重复相邻元素
// binary_search 二分查找 返回bool（不返回迭代器）
// count count 统计元素个数 （自定义数据类型需重载==）
// count_if 条件统计 （传入谓词）
// sort 排序 传入内置或自定义仿函数对象 内置需导入头文件functional
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void print1(int val)
{
    cout << val << " ";
}
class print2
{
public:
    void operator()(int val)
    {
        cout << val << "  ";
    }
};
// for_each
void test1()
{
    vector<int> v1;
    for (int i = 1; i < 6; ++i)
    {
        v1.push_back(10*i);
    }
    // 传入函数
    for_each(v1.begin(), v1.end(), print1);
    cout << endl;
    // 传入仿函数
    for_each(v1.begin(), v1.end(), print2());
}
class MyTransform
{
public:
    int operator()(int val)
    {
        return val + 200;
    }
};
// transform
void test2()
{
    vector<int> vsrc;
    for (int i = 1; i < 6; ++i)
    {
        vsrc.push_back(10*i);
    }
    vector<int> vdst;
    vdst.resize(vsrc.size());  // 注意提前开辟空间
    transform(vsrc.begin(), vsrc.end(), vdst.begin(), MyTransform());
    for_each(vdst.begin(), vdst.end(), print2());
}
int main(void)
{
    // test1(); // for_each
    test2(); // transform

    return 0;
}